<%@page import="album.Album"%>
<%@page import="java.net.URLEncoder"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="java.io.File"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>album1_FiledownLoad.jsp</title>
</head>
<body>
<jsp:useBean id="albumVo" class="album.AlbumVo"/>
<jsp:setProperty property="*" name="albumVo"/>
<%
	Album album = new Album();
	String savePath = album.getUploadPath();
	ServletContext content = this.getServletContext();
	
	//상대경로!!
	String str = content.getRealPath("WebContent"); // "WebContent" 폴더의 상대 경로를 겟 
	str = str.replace("\\WebContent", ""); // "\WebContetn" -> "" 로 바꾸기 

	String pro = str.substring(str.lastIndexOf("\\") + 1, str.length()); // 프로젝트 폴더명을 가져온다 	
	str = str.substring(0, str.indexOf(".")) + pro + "\\WebContent\\images";
	// 경로에서 "."이 시작하는 부분까지 자르고, 그 뒤에 프로젝트 폴더명을 붙이고, 그 뒤에 "\\WebContent\\upload"를 붙인다.
	
	savePath = str;
	
	String sFilePath = savePath + "/" + albumVo.getFilename();
	

	// 파일을 읽기 위한 버퍼 정의 
	byte[] b = new byte[4096];
	File file = new File(sFilePath);
	FileInputStream in = new FileInputStream(sFilePath);

	// 클라이언트의 요청에 따른 응답 정보 셋팅 
	String mineType = getServletContext().getMimeType(sFilePath);
	if (mineType == null)
		mineType = "application/octect-stream";
	response.setContentType(mineType);


	// 한글 파일명 처리 

	String userAgent = request.getHeader("User-Agent");
	String encoding="";
	
	if (userAgent.indexOf("Firefox") > -1){ // MS IE (보통은 6.x 이상 가정)
		String temp = albumVo.getFilename().replaceAll(" ", "");
		encoding = new String(albumVo.getFilename().getBytes("utf-8"), "8859-1");
	}
	else{
		encoding = URLEncoder.encode(albumVo.getFilename(), "UTF-8").replace("+", "%20");
	}
	
	// 다운로드 다이얼 로그 창 표시
	response.setHeader("Content-Disposition", "attachment;filename="+ encoding);

	// getOutputStream() 오류방지 ( 더블클릭시도 예방)
	out.clear();
	out = pageContext.pushBody();

	// 지정된 경로에 파일 저장
	ServletOutputStream sos = response.getOutputStream();
	int read = 0;
	while ((read = in.read(b, 0, b.length)) != -1) {
		// -1이면 파일 다 읽은 것.
		// b.length = 4Kb. 
		// in.read(b, 0, b.length) : 4kb씩 읽어랏.
		// reand에는 파일의 크기가 저장됨. 

		sos.write(b, 0, read);

	}

	sos.flush();
	sos.close();
	in.close();
%>
</body>
</html>